package fr.skolian.utils.log
{
	import flash.filesystem.File;
	import flash.filesystem.FileMode;
	import flash.filesystem.FileStream;

	
/*Skolian - Content management system for primary school - Copyright (c) 2011 - Olivier Gianotti - This file is part of Skolian. Skolian is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Skolian is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Skolian.  If not, see <http://www.gnu.org/licenses/>.
contact : ogianotti@gmail.com 

Skolian - Application de gestion de contenus pédagogiques en école primaire. Copyright (C) 2011 - Olivier Gianotti - Ce fichier est une partie de Skolian. Skolian est un logiciel libre ; vous pouvez le redistribuer et/ou le modifier au titre des clauses de la Licence Publique Générale GNU, telle que publiée par la Free Software Foundation ; soit la version 2 de la Licence, ou (à votre discrétion) une version ultérieure quelconque. Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIABILITE ou DE CONFORMITE A UNE UTILISATION PARTICULIERE. Voir la Licence Publique Générale GNU pour plus de détails. Vous devriez avoir reçu un exemplaire de la Licence Publique Générale GNU avec ce programme ; si ce n'est pas le cas, consultez <http://www.gnu.org/licenses/>.
contact : ogianotti@gmail.com 
*/

public class Log
	{
		
		private var _fileName:String;
		private var _file:File;
		private var _stream:FileStream;
		
		private static var _singleton:Log = new Log();
		
		public function Log(){
			_file = new File();
			_stream = new FileStream();
		}

		public static function getInstance():Log{
			return _singleton;
		}
		
		public function init(fileName:String):void{
			var date:Date = new Date();
			var month:String = date.getMonth()<9?String("0"+Number(date.getMonth()+1)):String(Number(date.getMonth()+1));
			var day:String = date.getDate()<10?String("0"+date.getDate()):String(date.getDate());
			_fileName = fileName+"-"+date.getFullYear()+"-"+month+"-"+day+".log";
			_file = File.applicationStorageDirectory.resolvePath(_fileName);
			if(!_file.exists){
				_stream.open(_file,FileMode.WRITE);
				_stream.writeUTFBytes("");
				_stream.close();
			}
		}
		
		static public function debug(...params):void{
			
			while(params.length>0){
				var message:String = String(params.shift());
				trace(message);
				message = "Debug : "+message;
				log(message);
			}
		}
		
		static public function error(message:String):void{
			message = "Error : "+message;
			log(message);
		}
		static public function log(message:String):void{
			var date:Date = new Date();
			var hrs:Number = date.getHours()+1;
			var hours:String = hrs<10?String("0"+hrs):String(hrs);
			var min:String = date.getMinutes()<10?String("0"+date.getMinutes()):String(date.getMinutes());
			var sec:String = date.getSeconds()<10?String("0"+date.getSeconds()):String(date.getSeconds());
			message = hours+":"+min+":"+sec+" - "+message+"\n";
			var stream:FileStream = _singleton._stream;
			stream.open(_singleton._file,FileMode.READ);
			var value:String = stream.readUTFBytes(stream.bytesAvailable);;
			stream.open(_singleton._file,FileMode.WRITE);
			stream.writeUTFBytes(value+message);
			stream.close();
		}

	}
}